/**
 * TimeUtils.java
 * 
 * Create Version: 1.0
 * Author: 刘洪政
 * Create Date: 2012-4-23
 */
package ysyh55.android.base.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * TimeUtils 时间相关工具类
 * 
 * @author 刘洪政
 */
public final class TimeUtils {
	private static String defaultDatePattern = "yyyy-MM-dd HH:mm:ss";

	/**
	 * 获得默认的 date pattern
	 */
	public static String getDatePattern() {
		return defaultDatePattern;
	}

	/**
	 * 返回预设Format的当前日期字符串
	 */
	public static String getToday() {
		Date today = new Date();
		return format(today);
	}

	/**
	 * 使用预设Format格式化Date成字符串
	 */
	public static String format(Date date) {
		return format(date, getDatePattern());
	}

	/**
	 * 使用参数Format格式化Date成字符串
	 */
	public static String format(Date date, String pattern) {
		String returnValue = "";

		if (date != null) {
			SimpleDateFormat df = new SimpleDateFormat(pattern);
			returnValue = df.format(date);
		}

		return (returnValue);
	}

	/**
	 * 使用预设格式将字符串转为Date
	 */
	public static Date parse(String strDate) throws ParseException {
		return parse(strDate, getDatePattern());
	}

	/**
	 * 使用参数Format将字符串转为Date
	 */
	public static Date parse(String strDate, String pattern) throws ParseException {
		SimpleDateFormat df = new SimpleDateFormat(pattern);
		return df.parse(strDate);
	}

	/**
	 * 在日期上增加数个整月
	 */
	public static Date addMonth(Date date, int n) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MONTH, n);
		return cal.getTime();
	}

	/**
	 * 在日期上增加数个小时
	 */
	public static Date addHour(Date date, double hour) {
		int second = (int) Math.round(hour * 3600);
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.SECOND, second);
		return cal.getTime();
	}

	/**
	 * 时间大小比较
	 * 
	 * @param timeStr
	 * @param compareTimeStr
	 * @return
	 */
	public static long compare(String timeStr, String compareTimeStr) {
		long timeStrLong = getTime(timeStr);
		long compareTimeStrLong = getTime(compareTimeStr);

		return timeStrLong - compareTimeStrLong;
	}

	/**
	 * 将字符型 yyyy-MM-dd HH:mm:ss 格式表示的时间字符串转换为毫秒.
	 * 与协调世界时 1970 年 1 月 1 日午夜之间的时间差;
	 * 
	 * 如果格式错误, 返回 -1
	 * 
	 * @param timeStr
	 * 
	 * @return
	 */
	public static long getTime(String timeStr) {
		if (timeStr == null) {
			return -1;
		}

		timeStr = timeStr.trim();

		long milliseconds = -1;

		try {
			Date date = new SimpleDateFormat(defaultDatePattern).parse(timeStr);
			milliseconds = date.getTime();
		} catch (Exception e) {
		}

		return milliseconds;
	}
}
